package com.hexinfo.dmpro.monitor.dao.serviceparam;

import com.hexinfo.dmpro.monitor.model.serviceparam.*;
import com.hexinfo.dmpro.monitor.util.ConvertUtil;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

@Repository
public interface CmTargetParamDao {

    List<CmTargetModel> selClusterService(CmServiceParamReq req);
    //参数管理-关键指标-组件栏
    List<String> selClusterServiceType(CmServiceParamReq req);
    List<CmTargetServiceModel> selClusterServiceTarget(CmServiceParamReq req);
    List<CmTargetServiceModel> selClusterServiceTargetOther(CmServiceParamReq req);
    CmTargetServiceModel queryTargetCode(@Param("targetCode") String targetCode);
    List<CmTargetModel> selTargetAlarmInfo(CmServiceParamReq req);

    List<Map> selMonitorTargetConfig(CmServiceParamReq req);

    int insMonitorTargetConfig(CmServiceParamReq req);

    int delMonitorTargetConfig(CmServiceParamReq req);

    int upMonitorTargetConfig(CmServiceParamReq req);

    int delClusterTarget(CmServiceParamReq req);

    int insClusterTarget(CmServiceParamReq req);

    int upTargetAlarmInfo(CmServiceParamReq req);

    CmTargetModel selTargetAlarmValue(CmServiceParamReq req);
    List<CmTargetModel> selTargetAlarmValueList(CmServiceParamReq req);
    List<CmReportModel> selTargetDetail(CmServiceParamReq req);
    List<CmReportModel> selTargetDetailHour(CmServiceParamReq req);

    List<CmAlarmCountModel> selAlarmCount(CmServiceParamReq req);

    //获取容量参数设置服务类型
    List<String> selServiceType();

    //按服务类型查询容量参数设置
    List<CmTargetServiceModel> selTypeTargetConfig(String serviceType);

    //按指标名称查询告警用户信息
    List<WarnSendConfigModel> selTypeWarningUser(String targetName);

    //按指标名称、集群编码，查询告警用户信息
    List<WarnSendConfigModel> selTypeAndFlagWarningUser(String targetName,String cmFlag,String clusterFlag);

    //获取接收人-列表
    List<WarningUserModel> selWarningUser(WarningUserModel user);

    //获取接收人
    List<WarningUserModel> selWarningUser();

    //按告警配置表id获取接收人
    List<WarningUserModel> selWarnUserdId(String id);

    //添加接收人
    int addWarningUser(WarningUserModel warn);

    //修改接收人
    int updateWarningUser(WarningUserModel warn);

    //删除接收人
    int deleteWarningUser(String id);

    //预警信息配置表-添加
    int addWarnSendConfig(WarnSendConfigModel warn);

    //预警信息与用户关系表-添加
    int addWarningNoUser(WarnSendConfigModel warn);

    //预警信息配置表-修改
    int updateWarnSendConfig(WarnSendConfigModel warn);

    //预警信息配置表-删除
    int deleteWarnSendConfig(String id);

    //按配置表id，删除预警信息与用户关系表数据
    int deleteWarningNoUser(String id);

    //按发布主题,获取预警信息配置表
    WarnSendConfigModel selWarnSendConfigName(String targetName);

    //参数管理-告警详情-告警发送-列表
    List<WarnSendConfigModel> selWarnSendConfig(WarnSendConfigModel warn);

    //参数管理-告警详情-告警发送-列表 接收人
    List<WarnSendConfigModel> selUserWarnSendConfig(WarnSendConfigModel warn);

    //预警信息配置表-发布
    int releaseWarnSendConfig(String id);

    //预警信息配置表-发布
    int noReleaseWarnSendConfig(String id);

    //按id，查询指标名称
    String selIdName(String id);

    //添加进告警日志表
    void addWarnLog(@Param("addWarnLogList") List<WarnSendLogModel> addWarnLogList);

    //告警日志表分页
    List<WarnSendLogModel> selWarnSendLog(WarnSendLogModel warn);

    //zookeeper连接数监控
    List<CmTargetModel> selZookeeperConn();

    //zookeeper监控:jvm近30分峰值
    List<CmTargetModel> selZookeeperJvmMax();

    //impala监控:jvm近30分最大容量
    List<CmTargetModel> selImpalaJvmMax();

    //impala监控:jvm近30分最大容量
    List<CmTargetModel> selImpalaHostsJvmMax();

    //hive监控:metastore JVM近30分最大容量
    List<CmTargetModel> selHiveMetastoreJvmMax();

    //hive监控:server2 JVM近30分最大容量
    List<CmTargetModel> selHiveServer2JvmMax();

    //hive的连接数
    List<CmTargetModel> selHiveConn();

    //impala的连接数
    List<CmTargetModel> selImpalaConn();

    //hbase regionServer Gc回收时间峰值
    List<CmTargetModel> selHbaseRegionServerGcMaxTime();

    //hbase master JVM近30分峰值
    List<CmTargetModel> selHbaseMasterJvmMax();

    //hbase regionServer JVM近30分峰值
    List<CmTargetModel> selHbaseRegionServerJvmMax();

    //hdfs丢失块监控
    List<CmTargetModel> hdfsLossBlock();

    //hdfs使用容量：使用的HDFS与使用的非HDFS都需要计入
    List<CmTargetModel> hdfsCapacityUsed();
}
